public class test {
    //蓝桥杯 划分(⭐⭐)
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //在此输入您的代码...
        int[] nums = new int[50];
        int sum = 0;
        for(int i = 1;i <= 40;i++){
            nums[i] = in.nextInt();
            sum += nums[i];
        }
        int target = sum / 2;
        long[] dp = new long[100];
        for(int i = 1;i <= 40;i++){
            for(int j = target;j >= 1;j--){
                if(j >= nums[i]){
                    dp[j] = Math.max(dp[j],dp[j - nums[i]] + nums[i]);
                }
            }
        }
        System.out.println((long)dp[target] * (sum - dp[target]));
    }
    //蓝桥杯 明日方舟大作战(⭐⭐⭐)
    public static int N = 10005;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //在此输入您的代码...
        //干员数量
        int n = in.nextInt();
        //敌人数量
        int m = in.nextInt();
        //总预算(背包容量)
        int B = in.nextInt();
        //攻击(价值) 和 花费(体积)
        int[] attack = new int[N];
        int[] cost = new int[N];
        for(int i = 1;i <= n;i++){
            attack[i] = in.nextInt();
            cost[i] = in.nextInt();
        }
        //敌人最大的生命值
        int max = 0;
        for(int i = 1;i <= m;i++){
            max = Math.max(max,in.nextInt());
        }
        // 1. 创建 dp 表
        //代表第 i 个干员时,最大花费为 j 情况下能获得的最大输出
        int[] dp = new int[N];
        // 2. 初始化

        // 3. 填表
        for(int i = 1;i <= n;i++){
            for(int j = B;j >= 1;j--){
                if(j >= cost[i]){
                    dp[j] = Math.max(dp[j],dp[j - cost[i]] + attack[i]);
                }
            }
        }
        // 4. 返回值
        if(dp[B] <= 0){
            System.out.println(-1);
        }else {
            System.out.println((int)Math.ceil((double)max / dp[B]));
        }
        in.close();
    }
    //蓝桥杯 购物策略(⭐⭐⭐)
    public static int N = 20000;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //在此输入您的代码...
        //商品的数量
        int n = in.nextInt();
        //代表时间(背包容积)和价格(物品价值)
        int[] t = new int[N];
        int[] c = new int[N];
        int v = 0;
        for(int i = 1;i <= n;i++){
            t[i] = in.nextInt() + 1;
            c[i] = in.nextInt();
            v = Math.max(v,t[i]);
        }
        // 1. 创建 dp 表
        //代表遍历到第 i 个商品时最小的花费
        v += n;
        long[] dp = new long[N];
        // 2. 初始化
        Arrays.fill(dp,1,v + 1,(long)1e18);
        // 3. 填表
        for(int i = 1;i <= n;i++){
            for(int j = v;j >= t[i];j--){
                dp[j] = Math.min(dp[j],dp[j - t[i]] + c[i]);
            }
        }
        long ans = Long.MAX_VALUE;
        for(int i = n;i <= v;i++){
            ans = Math.min(ans,dp[i]);
        }
        // 4. 返回值
        System.out.println(ans);
        in.close();
    }
}
